<!DOCTYPE html>
<html lang="zh" xmlns:th="http://www.thymeleaf.org" >
<head>
    <th:block th:include="include :: header('新增纵向课题')" />
    <th:block th:include="include :: datetimepicker-css" />
    <th:block th:include="include :: bootstrap-fileinput-css"/>
    <th:block th:include="include :: select2-css" />
</head>
<body class="white-bg">
<div class="wrapper wrapper-content animated fadeInRight ibox-content">
    <form class="form-horizontal m" id="form-apply-add">
        <input type="hidden" id="reAmount" name="reAmount">
        <input type="hidden" id="accountData" name="accountData">
        <div class="col-xs-6">
            <div class="form-group">
                <label class="col-sm-4 control-label is-required">申请人：</label>
                <div class="col-sm-8">
<!--                    <select name="userId" class="form-control m-b" disabled>-->
<!--                        <option th:each="user : ${sysUsers}" th:text="${user.userName}" th:value="${user.userId}" th:selected="${user.flag}"></option>-->
<!--                    </select>-->
                    <div th:each="user : ${sysUsers}" th:if="${user.flag}">
                        <input  class="form-control" type="text" th:value="${user.userName}" readonly>
                        <input name="userId" class="form-control" type="hidden" th:value="${user.userId}">
                    </div>
                </div>
            </div>
        </div>
        <div class="col-xs-6">
            <div class="form-group">
                <label class="col-sm-4 control-label is-required">课题类型：</label>
                <div class="col-sm-8">
                    <select name="topType" class="form-control" th:with="type=${@dict.getType('sci_vertical_type')}" required>
                        <option value="" selected>----请选择----</option>
                        <option th:each="dict : ${type}" th:text="${dict.dictLabel}" th:value="${dict.dictValue}"></option>
                    </select>
                </div>
            </div>
        </div>
        <div class="col-xs-6">
            <div class="form-group">
                <label class="col-sm-4 control-label is-required">课题名称：</label>
                <div class="col-sm-8">
                    <input name="topName" class="form-control" type="text" required  maxlength="50">
                </div>
            </div>
        </div>
        <div class="col-xs-6">
            <div class="form-group">
                <label class="col-sm-4 control-label">课题编号：</label>
                <div class="col-sm-8">
                    <input name="topNumber" class="form-control" type="text"  maxlength="20">
                </div>
            </div>
        </div>

        <div class="col-xs-6">
            <div class="form-group">
                <label class="col-sm-4 control-label is-required">项目金额(万)：</label>
                <div class="col-sm-8">
                    <input name="amount"  class="form-control" type="number" required step="0.0001" maxlength="9">
                </div>
            </div>
        </div>


        <div class="col-xs-6">
            <div class="form-group">
                <label class="col-sm-4 control-label is-required">立项日期：</label>
                <div class="col-sm-8">
                    <div class="input-group date">
                        <input autocomplete="off" name="signingData" class="form-control" placeholder="yyyy-MM-dd" type="text" required>
                        <span class="input-group-addon"><i class="fa fa-calendar"></i></span>
                    </div>
                </div>
            </div>
        </div>

        <div class="col-xs-6">
            <div class="form-group">
                <label class="col-sm-4 control-label is-required">主持人：</label>
                <div class="col-sm-8">
                    <div th:each="user : ${sysUsers}" th:if="${user.flag}">
                        <input  class="form-control" type="text" th:value="${user.userName}" readonly>
                        <input name="firstPersonId" class="form-control" type="hidden" th:value="${user.userId}">
                    </div>
                </div>
            </div>
        </div>


        <div class="col-xs-6">
            <div class="form-group">
                <label class="col-sm-4 control-label is-required">成员1：</label>
                <div class="col-sm-8">
                    <select id="member1Select" name="secondPersonId" class="form-control m-b" onchange="updateMemberLists()" required>
                        <option value="">---请选择--</option>
                        <option th:each="user : ${sysUsers}" th:text="${user.userName}" th:value="${user.userId}"  th:if="${user.userId} != 1 and ${user.flag != true}" ></option>
                    </select>
                </div>
            </div>
        </div>

        <div class="col-xs-6">
            <div class="form-group">
                <label class="col-sm-4 control-label is-required">成员2：</label>
                <div class="col-sm-8">
                    <select id="member2Select" name="thirdPersonId" class="form-control m-b" onchange="updateMemberLists()" required>
                        <option value="">---请选择--</option>
                        <option th:each="user : ${sysUsers}" th:text="${user.userName}" th:value="${user.userId}"  th:if="${user.userId} != 1 and ${user.flag != true}" ></option>
                    </select>
                </div>
            </div>
        </div>

        <div class="col-xs-6">
            <div class="form-group">
                <label class="col-sm-4 control-label is-required">成员3：</label>
                <div class="col-sm-8">
                    <select id="member3Select" name="fourthPersonId" class="form-control m-b" onchange="updateMemberLists()" required>
                        <option value="">--请选择--</option>
                        <option th:each="user : ${sysUsers}" th:text="${user.userName}" th:value="${user.userId}"  th:if="${user.userId} != 1 and ${user.flag != true}" ></option>
                    </select>
                </div>
            </div>
        </div>

        <!-- 第5位及以后：可动态添加 -->
        <div class="col-xs-12">
            <div class="form-group">
                <label class="col-sm-2 control-label">更多成员：</label>
                <div class="col-sm-10">
                    <div id="memberContainer" class="row"></div>
                    <button type="button" id="addMemberBtn" class="btn btn-white btn-sm" title="新增成员">
                        <a href="#"><i class="fa fa-plus-circle" ></i>增加成员</a>
                    </button>
                </div>
            </div>
        </div>


        <div class="col-xs-6">
            <div class="form-group">
                <label class="col-sm-4 control-label is-required">立项文件：</label>
                <div class="col-sm-8">
                    <input type="hidden" name="file">
                    <div class="file-loading">
                        <input class="form-control file-upload" id="file" name="file" type="file">
                    </div>
                </div>
            </div>
        </div>
    </form>
</div>
<div class="row">
    <div class="col-sm-offset-5 col-sm-10">
        <button type="button" class="btn btn-sm btn-primary" onclick="submitHandler()">  </i>保 存</button>&nbsp;
        <button type="button" class="btn btn-sm btn-danger" onclick="closeItem()"> 关 闭 </button>
    </div>
</div>
<th:block th:include="include :: footer" />
<th:block th:include="include :: datetimepicker-js" />
<th:block th:include="include :: bootstrap-fileinput-js"/>
<th:block th:include="include :: datetimepicker-js" />
<th:block th:include="include :: select2-js" />

<script th:inline="javascript">
    var prefix = ctx + "system/apply_vertical"
    $("#form-apply-add").validate({
        focusCleanup: true,
    });

    $("input[name='amount']").on('input', function() {
        var value = $(this).val();
        // 限制整数部分不超过9位
        if (value) {
            var numericValue = parseFloat(value);
            // 限制整数部分长度
            if (value.indexOf('.') !== -1) {
                var parts = value.split('.');
                if (parts[0].length > 9) {
                    $(this).val(parts[0].substring(0, 9) + (parts[1] ? '.' + parts[1] : ''));
                }
            } else {
                if (value.length > 9) {
                    $(this).val(value.substring(0, 9));
                }
            }
            // 限制小数点后只能输入四位
            if (value.indexOf('.') !== -1) {
                var parts = value.split('.');
                if (parts[1] && parts[1].length > 4) {
                    $(this).val(parts[0] + '.' + parts[1].substring(0, 4));
                }
            }
            // 限制最大值
            var valueStr = numericValue.toString();
            if (valueStr.length > 9){
                this.value = "";
                $.modal.alertError("输入金额有误差：总长度最大9位数，小数点后最大四位；例：9999.9999")
            }
        }
    });

    function submitHandler() {
        if ($.validate.form()) {
            var firstPersonId = document.querySelector('input[name="firstPersonId"]').value;
            var secondPersonId = document.querySelector('select[name="secondPersonId"]').value;
            var thirdPersonId = document.querySelector('select[name="thirdPersonId"]').value;
            var fourthPersonId = document.querySelector('select[name="fourthPersonId"]').value;
            
            // 先收集前四位（主持人 + 成员1/2/3）
            var personIds = [firstPersonId, secondPersonId, thirdPersonId, fourthPersonId];

            // 再收集第5位及以后的动态成员（过滤空）
            $('.member-select').each(function(){
                var val = $(this).val();
                if (val) personIds.push(val);
            });

            // 校验项目金额不能为负数
            var projectAmount = $("input[name='amount']").val();
            if (parseFloat(projectAmount) < 0) {
                return $.modal.alertError("请输入有效的项目金额");
            }

            // 校验项目金额小数点后最多4位
            if (!/^\d+(\.\d{1,4})?$/.test(projectAmount)) {
                return $.modal.alertError("项目金额小数点后最多4位");
            }

            if ($("input[name='file']").val() === "")
                return $.modal.alertError("请上传文件");

            // 校验课题名称不能包含特殊字符
            var topName = $("input[name='topName']").val();
            var specialCharPattern = /[@#￥%&*$!]/;

            if (specialCharPattern.test(topName)) {
                return $.modal.alertError("课题名称不能包含特殊字符");
            }
            if (topName === "") {
                return $.modal.alertError("课题名称不能为空或纯空格");
            }
            if (topName.length > 50) {
                return $.modal.alertError("课题名称不能超过50个字符");
            }
            $.operate.saveTab(prefix + "/add", $('#form-apply-add').serialize());
        }
    }


    $("input[name='signingData']").datetimepicker({
        format: "yyyy-mm-dd",
        minView: "month",
        autoclose: true
    });

    $(".file-upload").fileinput({
        uploadUrl: ctx + 'common/upload/zxkt',
        initialPreviewAsData: true,
        maxFileCount: 1,
        maxFileSize: 51200,
        autoReplace: true,
        allowedFileExtensions: ["pdf"],
        slugCallback: function(filename) {
            if ($("input[name='topName']").val()===""){
                $(".file-upload").fileinput('clear');
                $.modal.alertError("请先输入课题名称");
                return false;
            }
            // 自定义文件名生成规则
            fileExtension = filename.split('.').pop();
            const year = new Date().getFullYear();
            const newName = year +"-"+ $("input[name='topName']").val() +"-"+ "立项文件"+ "." + fileExtension;
            return newName;
        },
    }).on('fileuploaded', function (event, data, previewId, index) {
        $("input[type='hidden'][name='file']").val(data.response.url)
    }).on('fileremoved', function (event, id, index) {
        $("input[type='hidden'][name='file']").val('')
    })

    // 动态新增成员下拉（第5位起）与编辑页预渲染
    $(function(){
        // 页面加载完成后保存原始选项并初始化联动
        $('#member1Select, #member2Select, #member3Select').each(function() {
            var originalOptions = $(this).html();
            $(this).data('original-options', originalOptions);
        });
        
        function appendMemberSelect(selectedVal) {
            // 获取原始选项数据
            var originalOptions = $('#member1Select').data('original-options');
            var memberCount = $('.member-item').length + 1; // 计算当前成员数量
            var memberId = 'dynamicMember' + memberCount; // 为每个动态成员生成唯一ID

            var $tpl = $('<div class="col-xs-3 m-b-xs member-item">\
                <div class="input-group">\
                    <select id="' + memberId + '" name="members" class="form-control m-b member-select select2-select" onchange="updateMemberLists()"></select>\
                    <span class="input-group-btn">\
                        <button class="btn btn-danger btn-sm remove-member" type="button" title="移除"><i class="fa fa-minus"></i></button>\
                    </span>\
                </div>\
            </div>');

            var $select = $tpl.find('select.member-select');

            // 添加默认选项和原始选项
            $select.html('<option value="">---请选择--</option>' + originalOptions);

            $('#memberContainer').append($tpl);

            // 如果有选中的值，先设置选中值
            if (selectedVal) {
                $select.val(String(selectedVal));
            }

            // 初始化新添加的下拉框选项
            updateDynamicMemberList($select[0]);

            // 初始化Select2，支持输入检索
            $select.select2({
                width: '100%',
                placeholder: '输入检索成员',
                allowClear: true
            });

            // 如果有选中的值，触发change事件
            if (selectedVal) {
                $select.trigger('change');
            }
        }

        // 初始化前四位下拉的检索体验
        $('select[name="secondPersonId"], select[name="thirdPersonId"], select[name="fourthPersonId"]').each(function(){
            $(this).select2({
                width: '100%',
                placeholder: '输入检索成员',
                allowClear: true
            });
        });

        // 新增成员
        $('#addMemberBtn').on('click', function(){
            appendMemberSelect(null);
        });

        $(document).on('click', '.remove-member', function(){
            $(this).closest('.member-item').remove();
            // 移除成员后更新联动
            updateMemberLists();
        });
        
        // 初始化联动效果
        updateMemberLists();
        
        // 初始化Select2组件以支持搜索功能
        $('#member1Select, #member2Select, #member3Select').select2({
            placeholder: "---请选择--",
            allowClear: true,
            width: "100%"
        });

        // 页面加载完成后，更新所有动态成员的选项
        setTimeout(function() {
            updateMemberLists();
        }, 100);
    });
    
    // 更新成员下拉框列表
    function updateMemberLists() {
        // 获取所有已选中的成员ID（使用Set自动去重）
        var selectedIds = new Set();
        
        // 获取三个固定成员下拉框的值
        var member1Value = $('#member1Select').val();
        var member2Value = $('#member2Select').val();
        var member3Value = $('#member3Select').val();
        
        // 将非空值添加到Set中
        if (member1Value) selectedIds.add(member1Value);
        if (member2Value) selectedIds.add(member2Value);
        if (member3Value) selectedIds.add(member3Value);
        
        // 添加动态成员的选中值
        $('.member-select').each(function() {
            var value = $(this).val();
            if (value) {
                selectedIds.add(value);
            }
        });
        
        // 为每个固定下拉框更新选项
        updateSelectOptions('#member1Select', member1Value, selectedIds);
        updateSelectOptions('#member2Select', member2Value, selectedIds);
        updateSelectOptions('#member3Select', member3Value, selectedIds);
        
        // 为每个动态下拉框更新选项
        $('.member-select').each(function() {
            updateDynamicSelectOptions($(this), $(this).val(), selectedIds);
        });
    }
    
    // 更新单个下拉框的选项
    function updateSelectOptions(selectId, currentValue, selectedIds) {
        var selectElement = $(selectId);
        var originalOptions = selectElement.data('original-options');
        var isCurrentlySelected = selectElement.val(); // 保存当前选中的值
        
        // 清空当前选项（保留第一个提示选项）
        selectElement.find('option:not(:first)').remove();
        
        // 解析原始选项
        var tempDiv = $('<div>' + originalOptions + '</div>');
        var hasBlankOption = false; // 标记是否已添加空选项
        
        tempDiv.find('option').each(function() {
            var option = $(this);
            var value = option.val();
            
            // 只有当选项值为空（请选择）或未被其他下拉框选中时才添加
            // currentValue（当前下拉框已选中的值）总是会被保留，如果它不在其他下拉框中
            if (value === "" && !hasBlankOption) {
                // 只添加一次空选项
                selectElement.append(option.clone());
                hasBlankOption = true;
            } else if (value !== "" && (!selectedIds.has(value) || value === currentValue || value === "-1")) {
                // 添加非空选项，如果它未被其他下拉框选中，或者是当前下拉框已选中的值，或者userId为-1（其他）
                selectElement.append(option.clone());
            }
        });
        
        // 重新设置选中状态，确保选中的值仍然被选中
        if (isCurrentlySelected) {
            selectElement.val(isCurrentlySelected);
        }
    }

    // 更新动态添加的成员下拉框
    function updateDynamicMemberList(element) {
        var selectElement = $(element);
        var currentValue = selectElement.val();
        var allSelectedIds = getSelectedIds();
        
        // 为动态成员下拉框更新选项
        updateDynamicSelectOptions(selectElement, currentValue, allSelectedIds);
    }
    
    // 获取所有已选中的ID（包括固定成员和动态成员）
    function getSelectedIds() {
        var selectedIds = new Set();
        
        // 添加固定成员的选中值
        var member1Value = $('#member1Select').val();
        var member2Value = $('#member2Select').val();
        var member3Value = $('#member3Select').val();
        
        if (member1Value) selectedIds.add(member1Value);
        if (member2Value) selectedIds.add(member2Value);
        if (member3Value) selectedIds.add(member3Value);
        
        // 添加动态成员的选中值
        $('.member-select').each(function() {
            var value = $(this).val();
            if (value) {
                selectedIds.add(value);
            }
        });
        
        return selectedIds;
    }
    
    // 更新动态下拉框的选项
    function updateDynamicSelectOptions(selectElement, currentValue, selectedIds) {
        var originalOptions = $('#member1Select').data('original-options');
        var isCurrentlySelected = selectElement.val(); // 保存当前选中的值
        
        // 清空当前选项（保留第一个提示选项）
        selectElement.find('option:not(:first)').remove();
        
        // 解析原始选项
        var tempDiv = $('<div>' + originalOptions + '</div>');
        var hasBlankOption = false; // 标记是否已添加空选项
        
        tempDiv.find('option').each(function() {
            var option = $(this);
            var value = option.val();
            
            // 只有当选项值为空（请选择）或未被其他下拉框选中时才添加
            // currentValue（当前下拉框已选中的值）总是会被保留，如果它不在其他下拉框中
            if (value === "" && !hasBlankOption) {
                // 只添加一次空选项
                selectElement.append(option.clone());
                hasBlankOption = true;
            } else if (value !== "" && (!selectedIds.has(value) || value === currentValue || value === "-1")) {
                // 添加非空选项，如果它未被其他下拉框选中，或者是当前下拉框已选中的值，或者userId为-1（其他）
                selectElement.append(option.clone());
            }
        });
        
        // 重新设置选中状态，确保选中的值仍然被选中
        if (isCurrentlySelected) {
            selectElement.val(isCurrentlySelected);
        }
    }
</script>
</body>
</html>